热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

总图|弊端_vagrant安装教程及常见问题

篇首语:本文由编程笔记#小编为大家整理,主要介绍了vagrant-安装教程及常见问题相关的知识,希望对你有一定的参考价值。 前言: Vagrant是一个基于Ruby的工具,

篇首语:本文由编程笔记#小编为大家整理,主要介绍了vagrant-安装教程及常见问题相关的知识,希望对你有一定的参考价值。


前言:

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。

它的主要意义是让所有开发人员都使用和线上服务器一样的环境,本质上和你新建一个虚拟机。

 

那最常见的,正常我们是怎么开发呢,大部分童鞋应该是在windows下搭建开发环境,敲代码,运行程序,达到效果git或svn提交,发布linux环境再看效果。

 

而vagrant+virtualBox实现了把代码同步共享到linux虚拟机,而这个虚拟机你可以配成和你生产环境一样的,

说白了,通过共享文件到虚拟机,在类生产环境下运行。【让你在windows下体验到在linux开发的效果。

还有一种共享方式,可以借助IDE的develop功能通过sftp上传到服务器,然后访问服务器

三种方式总结:

【1】原始windows开发模式:windows开发-本地访问调试(与生产环境毕竟不同)-发布到linux运行

【2】vagrant + virtualBox模式: windows开发 - 文件本地共享 -- 直接访问虚拟机(linux环境与生产一致)

【3】IDE+develop 模式: windows开发 - 文件远程上传 -- 访问远程开发机(linux环境与生产一致)

 

其实【1】,与【2,3】的区别就在于,程序是在哪里运行的,windows本地?or Linux仿生产环境

(能在仿生产的环境直接开发肯定比在windows开发在放到linux更好些,开发方便避免一些环境上等的麻烦)

 

【2】与【3】的区别就在于文件是如何同步的:【2】是通过虚拟机文件共享实现同步;【3】直接利用sftp远程上传实现同步。

 

缺点:

【1】毫无疑问,它的弊端就是开发时不能模拟生产环境,可能会有衔接问题,环境有了问题不像虚拟机重安一台立刻搞定。

【3】存在的问题,比如:当切换开发分支后改动了文件a和b,当前ide选中的是a文件,ok他会自动上传更新,但是b文件不会,因为窗口你没在b文件下呀,没有那么智能不会自动触发上传更新,这点就坑了造成代码不同步,需要你自己手动触发一下相关文件的上传,尤其是依赖一些包的时候会发生丢失,得全项目上传一次;

【2】因为是本地和虚拟机的文件共享嘛,没有文件上传遗漏一说,所以还是很推荐用

 

目录:

一。安装虚拟机

二。Vagrantfile配置文件详解

三。连接虚拟机

四。碰到问题

 



virtualbox下载:https://www.virtualbox.org/wiki/Downloads

vagrantup下载:https://www.vagrantup.com/downloads.html

 

一。安装虚拟机

1.添加box

vagrant box add base your_box_addres

注意:base是默认名称,主要用来标识一下你添加的box,后面的命令都是基于这个标识来操作的,你也可以用其他名称【但是用了其他名字记得在第二步用此名字init】

 

2.初始化

vagrant init

vagrant init box_name

如果你添加的box名称不是[base],那么需要在初始化的时候指定名称

 

3.启动虚拟机

vagrant up

启动过程可能比较长,耐心等待

图一.运行过程总图




图二

相关指令:

vagrant up (启动虚拟机)
vagrant halt (关闭虚拟机——对应就是关机)
vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
vagrant resume (恢复虚拟机—— 与前面的暂停相对应)
vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)

vagrant package --base vcode_default_1517562334868_37421 --output 0329.box//打包当前版本系统为 box,方便给其他童鞋使用(vcode_default_1517562334868_37421 换成你自己的package)

 

二.Vagrantfile配置文件详解

在我们的开发目录下有一个文件Vagrantfile,里面包含有大量的配置信息,主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant的一些基础配置。(它的配置语法也是Ruby的)【修改配置文件,记得完后重启vagrant才能生效哦】

 

在我们的开发目录下有一个文件Vagrantfile,里面包含有大量的配置信息,主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant的一些基础配置。Vagrant是使用Ruby开发的,所以它的配置语法也是Ruby的,但是我们没有学过Ruby的人还是可以跟着它的注释知道怎么配置一些基本项的配置。

具体介绍,参考:http://blog.csdn.net/chajinglong/article/details/52805915
 

# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = "base"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 80
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder "D:/all_code/", "/home/www"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
# such as FTP and Heroku are also available. See the documentation at
# https://docs.vagrantup.com/v2/push/atlas.html for more information.
# config.push.define "atlas" do |push|
# push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
end

 

 

三.连接虚拟机

1.虚拟机相关登录信息

vagrant ssh

这样我们就可以像连接到一台服务器一样进行操作了。

图三

 

2.ssh登录

window机器不支持这样的命令&#xff0c;必须使用第三方客户端来进行连接&#xff0c;例如xmoba、putty、Xshell等.

ssh: 127.0.0.1
端口: 2222
用户名: vagrant
密码: vagrant

图四.xshell登陆举例

 

图五.xmoba登陆举例

 

3.系统信息

df -h

/vagrant这个目录是自动映射的&#xff0c;被映射到你刚刚建立的文件夹&#xff0c;这样就方便我们以后在开发机中进行开发&#xff0c;在虚拟机中进行运行效果测试了。

 

 

四。碰到问题&#xff1a;

问题1.vagrant up 时提示错误 cound not open file 问题

如果init指定了 add的名称test&#xff0c;那么init时也要说明&#xff0c;少了这一步

如下边错误演示与正确演示。

图六.错误演示

图七.正确演示

 

问题2.vagrant up 时提示错误&#xff1a;

The guest machine entered an invalid state while waiting for it
to boot. Valid states are &#39;starting, running&#39;. The machine is in the
&#39;poweroff&#39; state. Please verify everything is configured
properly and try again.
If the provider you&#39;re using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you&#39;re using VirtualBox, run &#96;vagrant up&#96; while the
VirtualBox GUI is open.
The primary issue for this error is that the provider you&#39;re using
is not properly configured. This is very rarely a Vagrant issue.

打开虚拟机启动&#xff0c;也会提示报错&#xff1a;

Unable to load R3 module D:\\virtualBox/VBoxDD.DLL (VBoxDD): GetLastError&#61;1790 (VERR_UNRESOLVED_ERROR).

 

原因&#xff1a;

本目录中的以下三个文件是原始的未被破解的WIN7 64位系统主题文件&#xff1a;

themeservice.dll &#xff0c; themeui.dll &#xff0c;uxtheme.dll

 

为了使用工具UniversalThemePatcher-x64.exe恢复主题&#xff0c;特地将以上3个文件&#xff0c;

各拷贝了一份&#xff0c;并重新命名如下&#xff1a;

themeservice.dll.backup &#xff0c;themeui.dll.backup &#xff0c;uxtheme.dll.backup

 

解决方法&#xff1a;

我们只须把重命名后的3个文件&#xff1a;

themeservice.dll.backup &#xff0c;themeui.dll.backup &#xff0c;uxtheme.dll.backup

拷贝到C:\\Windows\\System32目录下面&#xff0c;

然后运行工具UniversalThemePatcher-x64.exe进行恢复即可。

 

下载地址&#xff1a;http://download.csdn.net/download/ty_hf/10013443【里边有使用说明】

 

问题3.虚拟机一切正常&#xff0c;文件代码也映射到虚拟机&#xff0c;但就是不能正常访问。

a).配置文件需要删除

sudo rm -f /etc/udev/rules.d/70-persistent-net.rules

问题就处在在持久网络设备udev规则&#xff08;persistent network device udev rules&#xff09;是被原VM设置好的&#xff0c;再用box生成新VM时&#xff0c;这些rules需要被更新。而这和Vagrantfile里对新VM设置private network的指令发生冲突。删除就好了。

 

b).如果设置了host&#xff0c;虚拟机里也要设置一次

vi /etc/hosts


问题3.问题 default: Warning: Authentication failure. Retrying...

Bringing machine &#39;default&#39; up with &#39;virtualbox&#39; provider...
&#61;&#61;> default: Clearing any previously set forwarded ports...
&#61;&#61;> default: Clearing any previously set network interfaces...
&#61;&#61;> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
&#61;&#61;> default: Forwarding ports...
default: 22 (guest) &#61;> 2222 (host) (adapter 1)
&#61;&#61;> default: Booting VM...
&#61;&#61;> default: Waiting for machine to boot. This may take a few minute
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...

Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.
If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.
If you&#39;re using a custom box, make sure that networking is properly
working and you&#39;re able to connect to the machine. It is a common
problem that networking isn&#39;t setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.
If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.

解决&#xff1a;

编辑Vagrantfile &#xff0c;添加如下文件

config.ssh.username &#61; "vagrant"
config.ssh.password &#61; "vagrant"

 

然后重启vagrant 重新加载配置文件

vagrant halt
vagrant up

注意登陆的时候看下 vagrant ssh 看下你的登录信息&#xff0c;端口号

问题4.报错问题&#xff1a;

Bringing machine &#39;default&#39; up with &#39;virtualbox&#39; provider...
Your VM has become "inaccessible." Unfortunately, this is a critical error
with VirtualBox that Vagrant can not cleanly recover from. Please open VirtualBox
and clear out your inaccessible virtual machines or find a way to fix

 解决&#xff1a;

 http://doodlebobbers.com/vagrant-error-your-vm-has-become-inaccessible/

其实就是删除.vagrant文件夹&#xff0c;然后重启vagrant

 

问题5.vagrant 启动的时候报错

A Vagrant environment or target machine is required to run this
command. Run vagrant init to create a new Vagrant environment. Or,
get an ID of a target machine from vagrant global-status to run
this command on. A final option is to change to a directory with a
Vagrantfile and to try again.

少前边步骤了&#xff0c;比如vagrant init;或者没有进入对应vagrant init的文件夹

问题6.vagrant dns解析异常&#xff0c;访问接口特别慢&#xff0c;在Vagrantfile 配置文件中添加下边代码&#xff1a;

config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]

问题7.vagrant up 又提示新报错&#xff01;

D:\\vcode>vagrant up
Bringing machine &#39;default&#39; up with &#39;virtualbox&#39; provider...
Your VM has become "inaccessible." Unfortunately, this is a critical error
with VirtualBox that Vagrant can not cleanly recover from. Please open VirtualBo
x
and clear out your inaccessible virtual machines or find a way to fix
them.

问题8&#xff1a;C盘空间紧张

https://jingyan.baidu.com/article/ab0b563088c0adc15afa7db2.html

 

 

问题9&#xff1a;Centos 配置eth0 提示Device does not seem to be present

https://blog.csdn.net/xiaobei4929/article/details/40515247

相关资源&#xff1a;

官网下载&#xff1a;https://www.vagrantup.com/downloads.html

虚拟机等相关安装包&#xff1a; 链接&#xff1a;http://pan.baidu.com/s/1dEWSnEL 密码&#xff1a;ajaq

本文地址&#xff1a;http://blog.csdn.net/ty_hf/article/details/78314583

 

 


推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • SVN自动化正文共:5007 字预计阅读时间: 13 分钟平时自己多用Git来做版本控制,但很多公司内部依旧使用SVN,核心原因其实就是SVN够用了,懒得换,虽然自己用git,但对 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Maven入门、什么是Maven、如何使用Maven、Maven的项目结构、简单的Mavenjava项目、Maven常用命令、Maven项目之间的引用、Maven依赖的传递、可选、排除day01
    目录第一节Maven入门1.1什么是Maven1.2如何使用Maven第一步:下载Maven第二步:配置Maven的环境变量第三步:了解什 ... [详细]
  • 双十一在家学用 Git
    对于所有的开发者来说,掌握一门代码版本控制系统都是必须的,无论是自己做项目,团队合作,工作中的合作,都离不开版 ... [详细]
author-avatar
雨水-_-打湿我的脸_950
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有